//数组作为函数参数

//数组名是数组首元素的地址
//有两个例外
//1.sizeof (数组名)-- 数组名表示整个数组 -计算是整个数组的大小 -单位bit
//2. &数组名 --数组名表示整个数组 -取出的是整个数组的地址
//

#include<stdio.h>

//冒泡排序思想
//两两相邻比较,并可能交换
int buble_sort(int arr[],int sz)
{
    //计算元素个数
    //数组传入函数的是地址
    //int sz =sizeof(arr) / sizeof(arr[0]);//sizeof 不能在函数内计算,要在main函数计算
    //确定趟数
    int i=0;
    for (i =0;i<sz-1;i++)
    {
        //一趟冒泡的过程
        int j=0;

        //优化-1
        int flag=1;

        for (j=0; j<sz-1-i ;j++)//i每+1,最大位确定,j比较位减少一位
        {
            if (arr[j]>arr[j+1])
            {
                //exchange
                int tmp =arr[j];
                arr[j] =arr[j+1];
                arr[j+1] =tmp;

                //优化-2
                flag =0;//发生改变说明原数列不按顺序
            }
        }

        //优化-3
        //flag未改变,顺序正确
        if(flag==1)
        {
            break;
        }
    }
    return 0;
}


int main()
{
    int arr[] ={2,1,3};

    int sz =sizeof(arr)/sizeof(arr[0]);
    //排序为升序--冒泡排序
    buble_sort(arr,sz);

    int i=0;
    for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}